import { SetMetadata } from '@nestjs/common'
import { Role } from '../enum/roles.enum'

// 通过这个装饰器，可以将 roles 作为元数据存储在某个类或方法上，以供后续的权限校验逻辑使用。
// 这个常量将作为存储角色数据的键（key）来使用，在元数据中存储角色信息时会使用这个键。
export const ROLES_KEY = 'roles'

// 定义装饰器，接收一个或多个Role类型的参数，通过...roles收集传入的参数

// SetMetadata：是给类或方法添加元数据，供后续的拦截器、守卫（Guard）等组件读取和使用。
// 简单说，它就是“给函数或类贴标签”，这些标签不会影响原有逻辑，但可以在其他地方获取并作决策
//第一参数：元数据的键，用于标识所存储的数据
// 第二参数：元数据的值，可以是任何类型
//返回一个装饰器函数，可以作用于类或方法
export const Roles = (...roles: Role[]) => SetMetadata(ROLES_KEY, roles)
